// author: Shelman
// description: 封装的使用curl接口实现的FTP客户端
#pragma once


#include <iostream>
#include <string>

#ifdef __linux__
#include <curl/curl.h>
#else
#include "curl/curl.h"
#endif

#include "GlobalDef.h"




// FTP客户端
class FtpClient
{
public:
    /*****************************************************
     * 功能：构造函数
     * ***************************************************/
    FtpClient();

    /*****************************************************
     * 功能：析构函数
     * ***************************************************/
    virtual ~FtpClient();

    /*****************************************************
     * 功能：上传文件到FTP服务器
     * 输入参数：
     *      server：FTP服务端信息，url或者ip:port
     *      username：连接FTP服务的用户名
     *      password：连接FTP服务的密码
     *      localFilePath：本地文件路径
     *      remoteFilePath：远程文件路径
     * 返回值：
     *      bool：调用结果，true -- 成功，false -- 失败
     * ***************************************************/
    bool uploadFile(const std::string &server, const std::string &username
                    , const std::string &password, const std::string &localFilePath
                    , const std::string &remoteFilePath);

    /*****************************************************
     * 功能：从FTP服务器下载文件
     * 输入参数：
     *      server：FTP服务端信息，url或者ip:port
     *      username：连接FTP服务的用户名
     *      password：连接FTP服务的密码
     *      remoteFilePath：远程文件路径
     *      localFilePath：本地文件路径
     * 返回值：
     *      bool：调用结果，true -- 成功，false -- 失败
     * ***************************************************/
    bool downloadFile(const std::string &server, const std::string &username
                      , const std::string &password, const std::string &remoteFilePath
                      , const std::string &localFilePath);

private:
    CURL* curl_ = nullptr;
    CURLcode res_ = CURLE_OK;

};

